Set ๊ฐ์ฒด : ์ค๋ณต๋์ง ์๋ ์ ์ผํ ๊ฐ๋ค์ ์งํฉ
์ํ์ ์งํ์ ๊ตฌํํ๊ธฐ ์ํ ์๋ฃ๊ตฌ์กฐ์ด๋ฉฐ, ๊ทธ ํน์ฑ๊ณผ ์ผ์นํ๋ค. ๋ฐ๋ผ์ ๊ต์งํฉ, ํฉ์งํฉ, ์ฐจ์งํฉ, ์ฌ์งํฉ ๋ฑ์ ๊ตฌํํ ์ ์๋ค.
๋ฐฐ์ด๊ณผ ์ ์ฌํ์ง๋ง ๋ค์์ ๊ธฐ์ ๋ ํญ๋ชฉ์ ๋ํด์ ์ฐจ์ด๊ฐ ์๋ค.
- ๋์ผํ ๊ฐ์ ์ค๋ณตํ์ฌ ํฌํจํ์ง ์๋๋ค.
- ์์ ์์์ ์๋ฏธ๊ฐ ์๋ค.
- ์ธ๋ฑ์ค๋ก ์์์ ์ ๊ทผํ ์ ์๋ค.
- Set ๊ฐ์ฒด๋ Set ์์ฑ์ ํจ์๋ก ์์ฑํ๋ค.
const set = new Set();
console.log(set); // Set(0){}
//1. Set ์์ฑ์ ํจ์๋ ์ดํฐ๋ฌ๋ธ์ ์ธ์๋ก ์ ๋ฌ๋ฐ์ Set ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ค.
const set1 = new Set([1, 2, 3, 3]);
console.log(set1); // Set(3) {1, 2, 3}
const set2 = new Set("hello");
console.log(set2); // Set(4) {"h", "e", "l", "o"}
//2. ์ดํฐ๋ฌ๋ธ์ ์ค๋ณต๋ ๊ฐ์ Set ๊ฐ์ฒด์ ์์๋ก ์ ์ฅ๋์ง ์๋๋ค.
// 3. ์ค๋ณต์ ํ์ฉํ์ง ์๋ Set ๊ฐ์ฒด์ ํน์ฑ์ ํ์ฉํ์ฌ ๋ฐฐ์ด์์ ์ค๋ณต๋ ์์๋ฅผ ์ ๊ฑฐํ ์ ์๋ค.
// filter๋ฅผ ์ด์ฉํ ๋ฐฐ์ด์ ์ค๋ณต ์์ ์ ๊ฑฐ
const uniq = (array) => array.filter((v, i, self) => self.indexOf(v) === i);
console.log(uniq([2, 1, 2, 3, 4, 3, 4])); // [2, 1, 3, 4]
// Set์ ์ฌ์ฉํ ๋ฐฐ์ด์ ์ค๋ณต ์์ ์ ๊ฑฐ
const uniq = (array) => [...new Set(array)];
console.log(uniq([2, 1, 2, 3, 4, 3, 4])); // [2, 1, 3, 4]
- Set.prototype.size ํ๋กํผํฐ๋ฅผ ์ฌ์ฉ
const set = new Set([1, 2, 3, 3]);
console.log(set.size); // 3
size ํ๋กํผํฐ๋ setter ํจ์ ์์ด getterํจ์๋ง ์กด์ฌํ๋ ์ ๊ทผ์ ํ๋กํผํฐ.
์ฆ, size ํ๋กํผํฐ์ ์ซ์๋ฅผ ํ ๋นํ์ฌ Set ๊ฐ์ฒด์ ์์ ๊ฐ์๋ฅผ ๋ณ๊ฒฝํ ์ ์๋ค.
const set = new Set([1, 2, 3]);
console.log(Object.getOwnPropertyDescriptor(Set.prototype, "size"));
// {set: undefined, enumerable: false, configurable: true, get: ฦ}
set.size = 10; // ๋ฌด์๋๋ค.
console.log(set.size); // 3
- Set.prototype.add ๋ฉ์๋๋ฅผ ์ฌ์ฉ
const set = new Set();
console.log(set); // Set(0) {}
// 1. Set๊ฐ์ฒด์ ์์ ์ถ๊ฐ : add ๋ฉ์๋ ์ฌ์ฉ
set.add(1);
console.log(set); // Set(1) {1}
// 2. method chaining
set.add(2).add(3);
console.log(set); // Set(3) {1, 2, 3}
// 3. ์ค๋ณต๋ ์์๋ฅผ ์ถ๊ฐํ ๊ฒฝ์ฐ ๋ฌด์๋จ
set.add(3).add(3);
console.log(set); //Set(3) {1, 2, 3}
// 4. ์ผ์น ๋น๊ต ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ๋ฉด NaN๊ณผ NaN์ ๋ค๋ฅด๋ค๊ณ ํ๊ฐ๋จ. ๊ทธ๋ฌ๋ Set ๊ฐ์ฒด๋ ์ด๋ฅผ ๊ฐ๋ค๊ณ ํ๊ฐํ์ฌ ์ค๋ณต ์ถ๊ฐ๋ฅผ ํ์ฉํ์ง ์์. +0๊ณผ -0๋ ๊ฐ์ ๋งฅ๋ฝ์ผ๋ก ํ์ฉํ์ง ์์.
const set = new Set();
console.log(NaN === NaN); // false
console.log(+0 === -0); // true
// NaN๊ณผ NaN์ ๊ฐ๋ค๊ณ ํ๊ฐํ์ฌ ์ค๋ณต ์ถ๊ฐ๋ฅผ ํ์ฉํ์ง ์๋๋ค.
set.add(NaN).add(NaN);
console.log(set); // Set(1) {NaN}
// +0๊ณผ -0์ ๊ฐ๋ค๊ณ ํ๊ฐํ์ฌ ์ค๋ณต ์ถ๊ฐ๋ฅผ ํ์ฉํ์ง ์๋๋ค.
set.add(+0).add(-0);
console.log(set); // Set(2) {NaN, 0}
// 5. Set ๊ฐ์ฒด๋ ๊ฐ์ฒด๋ ๋ฐฐ์ด๊ณผ ๊ฐ์ด ์๋ฐ์คํฌ๋ฆฝํธ์ ๋ชจ๋ ๊ฐ์ ์์๋ก ์ ์ฅ๊ฐ๋ฅ
const set = new Set();
set.add(1).add("a").add(true).add(undefined).add(null).add({}).add([]).add(() => {});
console.log(set); // Set(7) {1, 'a', true, undefined, null, {โฆ}, Array(0), ฦ}
- Set.prototype.has ๋ฉ์๋ ์ฌ์ฉ
- ๋ฐํ๊ฐ : ๋ถ๋ฆฌ์ธ ๊ฐ. ์์์ ์กด์ฌ ์ฌ๋ถ๋ฅผ ๋ํ๋.
const set = new Set([1, 2, 3]);
console.log(set.has(2)); // true
console.log(set.has(4)); // false
- Set .prototoype.delete ๋ฉ์๋ ์ฌ์ฉ
- ๋ฐํ๊ฐ : ๋ถ๋ฆฌ์ธ ๊ฐ. ์ญ์ ์ฑ๊ณต ์ฌ๋ถ.
- ์ธ์ : ์ญ์ ํ๋ ค๋ ์์๊ฐ์ ์ ๋ฌ
const set = new Set([1, 2, 3]);
// ์์ 2๋ฅผ ์ญ์ ํ๋ค.
set.delete(2);
console.log(set); // Set(2) {1, 3}
// ์์ 1์ ์ญ์ ํ๋ค.
set.delete(1);
console.log(set); // Set(1) {3}
// ์กด์ฌํ์ง ์๋ ๊ฐ์ ๋ํ ์ญ์ ๋ ๋ฌด์๋จ
set.delete(0);
console.log(set); // Set(1) {3}
// delete๋ ๋ถ๋ฆฌ์ธ ๊ฐ์ ๋ฐํํ๋ฏ๋ก method chaining์ด ๋ถ๊ฐ๋ฅ
set.delete(1).delete(2); // TypeError: set.delete(...).delete is not a function
- Set.prototype.clear ๋ฉ์๋ ์ฌ์ฉ
- ๋ฐํ๊ฐ : undefined
const set = new Set([1, 2, 3]);
set.clear();
console.log(set); // Set(0) {}
- Set.prototype.forEach ๋ฉ์๋ ์ฌ์ฉ
- ์ธ์ : ์ฝ๋ฐฑํจ์์ forEach๋ฉ์๋์ ์ฝ๋ฐฑํจ์๋ด๋ถ์์ this๋ก ์ฌ์ฉ๋ ๊ฐ์ฒด(์ต์ )๋ฅผ ์ ๋ฌ
- ์ฝ๋ฐฑํจ์์ ์ธ์ : 1-ํ์ฌ ์ํ์ค์ธ ์์๊ฐ, 2-ํ์ฌ ์ํ์ค์ธ ์์๊ฐ, 3-ํ์ฌ ์ํ์ค์ธ Set ๊ฐ์ฒด ์ง์ฒด. (์ฒซ๋ฒ์งธ, ๋๋ฒ์งธ ์ธ์๊ฐ ๋์ผํ ์ด์ ๋ ๋จ์ง Array.prototype.forEach๋ฉ์๋์ ์ธํฐํ์ด์ค๋ฅผ ํต์ผํ๊ธฐ ์ํจ.)
const set = new Set([1, 2, 3]);
set.forEach((v, v2, set) => console.log(v, v2, set));
/*
1 1 Set(3) {1, 2, 3}
2 2 Set(3) {1, 2, 3}
3 3 Set(3) {1, 2, 3}
*/
- Set ๊ฐ์ฒด๋ ์ดํฐ๋ฌ๋ธ. ๋ฐ๋ผ์ ๋ค์ ๋์์ด ๊ฐ๋ฅํจ
- for...of๋ฌธ์ผ๋ก ์ํ ๊ฐ๋ฅ.
- ์คํ๋ ๋ ๋ฌธ๋ฒ
- ๋ฐฐ์ด ๋์คํธ๋ญ์ณ๋ง
const set = new Set([1, 2, 3]);
// Set ๊ฐ์ฒด๋ Set.prototype์ Symbol.iterator ๋ฉ์๋๋ฅผ ์์๋ฐ๋ ์ดํฐ๋ฌ๋ธ์ด๋ค.
console.log(Symbol.iterator in set); // true
// ์ดํฐ๋ฌ๋ธ์ธ Set ๊ฐ์ฒด๋ for...of ๋ฌธ์ผ๋ก ์ํํ ์ ์๋ค.
for (const value of set) {
console.log(value); // 1 2 3
}
// ์ดํฐ๋ฌ๋ธ์ธ Set ๊ฐ์ฒด๋ ์คํ๋ ๋ ๋ฌธ๋ฒ์ ๋์์ด ๋ ์ ์๋ค.
console.log([...set]); // [1, 2, 3]
// ์ดํฐ๋ฌ๋ธ์ธ Set ๊ฐ์ฒด๋ ๋ฐฐ์ด ๋์คํธ๋ญ์ฒ๋ง ํ ๋น์ ๋์์ด ๋ ์ ์๋ค.
const [a, ...rest] = set;
console.log(a, rest); // 1, [2, 3]
console.log(...set); // [1, 2, 3]
- Set ๊ฐ์ฒด๋ ์์์ ์์์ ์๋ฏธ๋ฅผ ๊ฐ์ง ์์ง๋ง, Set ๊ฐ์ฒด๋ฅผ ์ํํ๋ ์์๋ ์์๊ฐ ์ถ๊ฐ๋ ์์๋ฅผ ๋ฐ๋ฅธ๋ค.
-
๊ต์งํฉ
// ๋ฐฉ๋ฒ1 Set.prototype.intersection = function (set) { const result = new Set(); for (const value of set) { // 2๊ฐ์ set์ ์์๊ฐ ๊ณตํต๋๋ ์์์ด๋ฉด ๊ต์งํฉ์ ๋์์ด๋ค. if (this.has(value)) result.add(value); } return result; }; //๋ฐฉ๋ฒ2 Set.prototype.intersection = function (set) { return new Set([...this].filter((v) => set.has(v))); }; const setA = new Set([1, 2, 3, 4]); const setB = new Set([2, 4]); // setA์ setB์ ๊ต์งํฉ console.log(setA.intersection(setB)); // Set(2) {2, 4} // setB์ setA์ ๊ต์งํฉ console.log(setB.intersection(setA)); // Set(2) {2, 4}
-
ํฉ์งํฉ
//๋ฐฉ๋ฒ1 Set.prototype.union = function (set) { // this(Set ๊ฐ์ฒด)๋ฅผ ๋ณต์ฌ const result = new Set(this); for (const value of set) { // ํฉ์งํฉ์ 2๊ฐ์ Set ๊ฐ์ฒด์ ๋ชจ๋ ์์๋ก ๊ตฌ์ฑ๋ ์งํฉ์ด๋ค. ์ค๋ณต๋ ์์๋ ํฌํจ๋์ง ์๋๋ค. result.add(value); } return result; }; //๋ฐฉ๋ฒ2 Set.prototype.union = function (set) { return new Set([...this, ...set]); }; const setA = new Set([1, 2, 3, 4]); const setB = new Set([2, 4]); // setA์ setB์ ํฉ์งํฉ console.log(setA.union(setB)); // Set(4) {1, 2, 3, 4} // setB์ setA์ ํฉ์งํฉ console.log(setB.union(setA)); // Set(4) {2, 4, 1, 3}
-
์ฐจ์งํฉ
//๋ฐฉ๋ฒ1 Set.prototype.difference = funct\ion (set) { // this(Set ๊ฐ์ฒด)๋ฅผ ๋ณต์ฌ const result = new Set(this); for (const value of set) { // ์ฐจ์งํฉ์ ์ด๋ ํ์ชฝ ์งํฉ์๋ ์กด์ฌํ์ง๋ง ๋ค๋ฅธ ํ์ชฝ ์งํฉ์๋ ์กด์ฌํ์ง ์๋ ์์๋ก ๊ตฌ์ฑ๋ ์งํฉ์ด๋ค. result.delete(value); } return result; }; //๋ฐฉ๋ฒ2 Set.prototype.difference = function (set) { return new Set([...this].filter(v => !set.has(v))); }; const setA = new Set([1, 2, 3, 4]); const setB = new Set([2, 4]); // setA์ ๋ํ setB์ ์ฐจ์งํฉ console.log(setA.difference(setB)); // Set(2) {1, 3} // setB์ ๋ํ setA์ ์ฐจ์งํฉ console.log(setB.difference(setA)); // Set(0) {}
-
๋ถ๋ถ์งํฉ๊ณผ ์์์งํฉ
//๋ฐฉ๋ฒ1 // this๊ฐ subset์ ์์ ์งํฉ์ธ์ง ํ์ธํ๋ค. Set.prototype.isSuperset = function (subset) { for (const value of subset) { // superset์ ๋ชจ๋ ์์๊ฐ subset์ ๋ชจ๋ ์์๋ฅผ ํฌํจํ๋์ง ํ์ธ if (!this.has(value)) return false; } return true; }; //๋ฐฉ๋ฒ2 // this๊ฐ subset์ ์์ ์งํฉ์ธ์ง ํ์ธํ๋ค. Set.prototype.isSuperset = function (subset) { const supersetArr = [...this]; return [...subset].every((v) => supersetArr.includes(v)); }; const setA = new Set([1, 2, 3, 4]); const setB = new Set([2, 4]); // setA๊ฐ setB์ ์์ ์งํฉ์ธ์ง ํ์ธํ๋ค. console.log(setA.isSuperset(setB)); // true // setB๊ฐ setA์ ์์ ์งํฉ์ธ์ง ํ์ธํ๋ค. console.log(setB.isSuperset(setA)); // false
-
Map ์ ํค์ ๊ฐ์ ์์ผ๋ก ์ด๋ฃจ์ด์ง ์ปฌ๋ ์ ์ด๋ค.
-
๊ฐ์ฒด์ ์ ์ฌํ์ง๋ง ์ฐจ์ด์ ์ด ์๋ค.
๊ตฌ๋ถ ๊ฐ์ฒด Map ๊ฐ์ฒด ํค๋ก ์ฌ์ฉํ ์ ์๋ ๊ฐ ๋ฌธ์์ด ๋๋ ์ฌ๋ฒ ๊ฐ ๊ฐ์ฒด๋ฅผ ํฌํจํ ๋ชจ๋ ๊ฐ ์ดํฐ๋ฌ๋ธ X O ์์ ๊ฐ์ ํ์ธ Object.keys(obj).length map.size
- Map ์์ฑ์ ํจ์๋ก ์์ฑ
const map = new Map();
console.log(map); // Map(0) {}
Map ์์ฑ์ ํจ์๋ ์ดํฐ๋ฌ๋ธ์ ์ธ์๋ก ์ ๋ฌ๋ฐ์ Map๊ฐ์ฒด๋ฅผ ์์ฑํจ. ์ด๋ ์ธ์๋ก ์ ๋ฌ๋๋ ์ดํฐ๋ฌ๋ธ์ ํค์ ๊ฐ์ ์์ผ๋ก ์ด๋ฃจ์ด์ง ์์๋ก ๊ตฌ์ฑ๋ผ์ผํจ
const map1 = new Map([
["key1", "value1"],
["key2", "value2"],
]);
console.log(map1); // Map(2) {"key1" => "value1", "key2" => "value2"}
const map2 = new Map([1, 2]); // TypeError: Iterator value 1 is not an entry object
Map ์์ฑ์ ํจ์์ ์ธ์๋ก ์ ๋ฌํ ์ดํฐ๋ฌ๋ธ์ ์ค๋ณต๋ ํค๋ฅผ ๊ฐ๋ ์์๊ฐ ์กด์ฌํ๋ฉด ๊ฐ์ฑ ๋ฎ์ด์์ด์ง. ์ฆ, Map ๊ฐ์ฒด์๋ ์ค๋ณต๋ ํค๋ฅผ ๊ฐ๋ ์์๊ฐ ์กด์ฌํ ์ ์๋ค.
const map = new Map([
["key1", "value1"],
["key1", "value2"],
]);
console.log(map); // Map(1) {"key1" => "value2"}
-
Map.prototype.size ํ๋กํผํฐ๋ฅผ ์ฌ์ฉ
const map = new Map([ ["key1", "value1"], ["key2", "value2"], ]); console.log(map.size); // 2
size ํ๋กํผํฐ๋ setter ํจ์ ์์ด getterํจ์๋ง ์กด์ฌํ๋ ์ ๊ทผ์ ํ๋กํผํฐ.
์ฆ, size ํ๋กํผํฐ์ ์ซ์๋ฅผ ํ ๋นํ์ฌ Map ๊ฐ์ฒด์ ์์ ๊ฐ์๋ฅผ ๋ณ๊ฒฝํ ์ ์๋ค.
const map = new Map([ ["key1", "value1"], ["key2", "value2"], ]); console.log(Object.getOwnPropertyDescriptor(Map.prototype, "size")); // {set: undefined, enumerable: false, configurable: true, get: ฦ} map.size = 10; // ๋ฌด์๋๋ค. console.log(map.size); // 2
-
Map.prototype.set ๋ฉ์๋ ์ฌ์ฉ
const map = new Map(); console.log(map); // Map(0) {} map.set("key1", "value1"); console.log(map); // Map(1) {"key1" => "value1"}
-
method chaining ๊ฐ๋ฅ
const map = new Map(); map.set("key1", "value1").set("key2", "value2"); console.log(map); // Map(2) {"key1" => "value1", "key2" => "value2"}
-
์ค๋ณต๋ ํค๋ฅผ ๊ฐ๋ ์์๊ฐ ์กด์ฌํ ์ ์์ผ๋ฏ๋ก, ์ค๋ณต๋ ํค๋ฅผ ๊ฐ๋ ์์๋ฅผ ์ถ๊ฐํ๋ฉด ๊ฐ์ด ๋ฎ์ด์์์ง. ์๋ฌ๋ฐ์X
const map = new Map(); map.set("key1", "value1").set("key1", "value2"); console.log(map); // Map(1) {"key1" => "value2"}
-
์ผ์น ๋น๊ต ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ๋ฉด NaN๊ณผ NaN์ ๋ค๋ฅด๋ค๊ณ ํ๊ฐ๋จ. ๊ทธ๋ฌ๋ Map ๊ฐ์ฒด๋ ์ด๋ฅผ ๊ฐ๋ค๊ณ ํ๊ฐํ์ฌ ์ค๋ณต ์ถ๊ฐ๋ฅผ ํ์ฉํ์ง ์์. +0๊ณผ -0๋ ๊ฐ์ ๋งฅ๋ฝ์ผ๋ก ํ์ฉํ์ง ์์.
const map = new Map(); console.log(NaN === NaN); // false console.log(0 === -0); // true // NaN๊ณผ NaN์ ๊ฐ๋ค๊ณ ํ๊ฐํ์ฌ ์ค๋ณต ์ถ๊ฐ๋ฅผ ํ์ฉํ์ง ์๋๋ค. map.set(NaN, "value1").set(NaN, "value2"); console.log(map); // Map(1) { NaN => 'value2' } // +0๊ณผ -0์ ๊ฐ๋ค๊ณ ํ๊ฐํ์ฌ ์ค๋ณต ์ถ๊ฐ๋ฅผ ํ์ฉํ์ง ์๋๋ค. map.set(0, "value1").set(-0, "value2"); console.log(map); // Map(2) { NaN => 'value2', 0 => 'value2' }
-
Map ๊ฐ์ฒด๋ ํค ํ์ ์ ์ ํ์ด ์๋ค. ๋ฐ๋ผ์ ๊ฐ์ฒด๋ฅผ ํฌํจํ ๋ชจ๋ ๊ฐ์ ํค๋ก ์ฌ์ฉํ ์ ์๋ค.
const map = new Map(); const lee = { name: "Lee" }; const kim = { name: "Kim" }; // ๊ฐ์ฒด๋ ํค๋ก ์ฌ์ฉํ ์ ์๋ค. map.set(lee, "developer").set(kim, "designer"); console.log(map); // Map(2) { {name: "Lee"} => "developer", {name: "Kim"} => "designer" }
-
Map.prototype.get ๋ฉ์๋๋ฅผ ์ฌ์ฉ
-
์ธ์ : ํค๋ฅผ ์ ๋ฌ
-
๋ฐํ : ์ธ์๋ก์ ๋ฌํ ํค๋ฅผ ๊ฐ๋
๊ฐ
์ ๋ฐํ. ์๋ค๋ฉด undefined๋ฅผ ๋ฐํconst map = new Map(); const lee = { name: "Lee" }; const kim = { name: "Kim" }; map.set(lee, "developer").set(kim, "designer"); console.log(map.get(lee)); // developer console.log(map.get("key")); // undefined
-
Map.prototype.has ๋ฉ์๋
-
๋ฐํ : ๋ถ๋ฆฌ์ธ ๊ฐ. ํน์ ์์์ ์กด์ฌ ์ฌ๋ถ๋ฅผ ๋ํ๋
const lee = { name: "Lee" }; const kim = { name: "Kim" }; const map = new Map([ [lee, "developer"], [kim, "designer"], ]); console.log(map.has(lee)); // true console.log(map.has("key")); // false
-
Map.prototype.delete ๋ฉ์๋ ์ฌ์ฉ
-
๋ฐํ๊ฐ : ๋ถ๋ฆฌ์ธ ๊ฐ. ์ญ์ ์ฑ๊ณต ์ฌ๋ถ.
-
์ธ์ : ์ญ์ ํ๋ ค๋ ํค๋ฅผ ์ ๋ฌ
const lee = { name: "Lee" }; const kim = { name: "Kim" }; const map = new Map([ [lee, "developer"], [kim, "designer"], ]); map.delete(kim); console.log(map); // Map(1) { {name: "Lee"} => "developer" }
์กด์ฌํ์ง ์๋ ํค๋ฅผ ์ธ์๋ก ์ ๋ฌํ๋ฉด ์๋ฌ์์ด ๋ฌด์๋จ.
const map = new Map([["key1", "value1"]]); // ์กด์ฌํ์ง ์๋ ํค 'key2'๋ก ์์๋ฅผ ์ญ์ ํ๋ ค ํ๋ฉด ์๋ฌ์์ด ๋ฌด์๋๋ค. map.delete("key2"); console.log(map); // Map(1) {"key1" => "value1"}
delete๋ ๋ถ๋ฆฌ์ธ ๊ฐ์ ๋ฐํํ๋ฏ๋ก method chaining์ด ๋ถ๊ฐ๋ฅ
const lee = { name: "Lee" }; const kim = { name: "Kim" }; const map = new Map([ [lee, "developer"], [kim, "designer"], ]); map.delete(lee).delete(kim); // TypeError: map.delete(...).delete is not a function
-
Map.prototype.clear ๋ฉ์๋ ์ฌ์ฉ
const lee = { name: "Lee" }; const kim = { name: "Kim" }; const map = new Map([ [lee, "developer"], [kim, "designer"], ]); map.clear(); console.log(map); // Map(0) {}
-
Map.prototype.forEach ๋ฉ์๋ ์ฌ์ฉ
-
์ธ์ : ์ฝ๋ฐฑํจ์์ forEach๋ฉ์๋์ ์ฝ๋ฐฑํจ์๋ด๋ถ์์ this๋ก ์ฌ์ฉ๋ ๊ฐ์ฒด(์ต์ )๋ฅผ ์ ๋ฌ
-
์ฝ๋ฐฑํจ์์ ์ธ์ : 1-ํ์ฌ ์ํ์ค์ธ ์์๊ฐ, 2-ํ์ฌ ์ํ์ค์ธ ์์ํค, 3-ํ์ฌ ์ํ์ค์ธ Map๊ฐ์ฒด ์ง์ฒด.
const lee = { name: "Lee" }; const kim = { name: "Kim" }; const map = new Map([ [lee, "developer"], [kim, "designer"], ]); map.forEach((v, k, map) => console.log(v, k, map)); /* developer {name: "Lee"} Map(2) { {name: "Lee"} => "developer", {name: "Kim"} => "designer" } designer {name: "Kim"} Map(2) { {name: "Lee"} => "developer", {name: "Kim"} => "designer" } */
-
Map ๊ฐ์ฒด๋ ์ดํฐ๋ฌ๋ธ. ๋ฐ๋ผ์ ๋ค์ ๋์์ด ๊ฐ๋ฅํจ
- for...of๋ฌธ์ผ๋ก ์ํ ๊ฐ๋ฅ.
- ์คํ๋ ๋ ๋ฌธ๋ฒ
- ๋ฐฐ์ด ๋์คํธ๋ญ์ณ๋ง
const lee = { name: "Lee" }; const kim = { name: "Kim" }; const map = new Map([ [lee, "developer"], [kim, "designer"], ]); // Map ๊ฐ์ฒด๋ Map.prototype์ Symbol.iterator ๋ฉ์๋๋ฅผ ์์๋ฐ๋ ์ดํฐ๋ฌ๋ธ์ด๋ค. console.log(Symbol.iterator in map); // true // ์ดํฐ๋ฌ๋ธ์ธ Map ๊ฐ์ฒด๋ for...of ๋ฌธ์ผ๋ก ์ํํ ์ ์๋ค. for (const entry of map) { console.log(entry); // [{name: "Lee"}, "developer"] [{name: "Kim"}, "designer"] } // ์ดํฐ๋ฌ๋ธ์ธ Map ๊ฐ์ฒด๋ ์คํ๋ ๋ ๋ฌธ๋ฒ์ ๋์์ด ๋ ์ ์๋ค. console.log([...map]); // [[{name: "Lee"}, "developer"], [{name: "Kim"}, "designer"]] // ์ดํฐ๋ฌ๋ธ์ธ Map ๊ฐ์ฒด๋ ๋ฐฐ์ด ๋์คํธ๋ญ์ฒ๋ง ํ ๋น์ ๋์์ด ๋ ์ ์๋ค. const [a, b] = map; console.log(a, b); // [{name: "Lee"}, "developer"] [{name: "Kim"}, "designer"]
Map ๊ฐ์ฒด๋ ์ดํฐ๋ฌ๋ธ์ด๋ฉด์ ๋์์ ์ดํฐ๋ ์ดํฐ์ธ ๊ฐ์ฒด๋ฅผ ๋ฐํํ๋ ๋ฉ์๋๋ฅผ ์ ๊ณตํ๋ค.
- Map.prototype.keys : ์์ํค๋ฅผ ๊ฐ์ผ๋ก ๊ฐ๋ ์ดํฐ๋ฌ๋ธ์ด๋ฉด์ ์ดํฐ๋ ์ดํฐ์ธ ๊ฐ์ฒด๋ฅผ ๋ฐํ
- Map.prototype.values : ์์๊ฐ์ ๊ฐ์ผ๋ก ๊ฐ๋ ์ดํฐ๋ฌ๋ธ์ด๋ฉด์ ์ดํฐ๋ ์ดํฐ์ธ ๊ฐ์ฒด๋ฅผ ๋ฐํ
- Map.prototype.entries : ์์ํค์ ์์๊ฐ์๊ฐ์ผ๋ก ๊ฐ๋ ์ดํฐ๋ฌ๋ธ์ด๋ฉด์ ์ดํฐ๋ ์ดํฐ์ธ ๊ฐ์ฒด๋ฅผ ๋ฐํ
const lee = { name: "Lee" };
const kim = { name: "Kim" };
const map = new Map([
[lee, "developer"],
[kim, "designer"],
]);
// Map.prototype.keys๋ Map ๊ฐ์ฒด์์ ์์ํค๋ฅผ ๊ฐ์ผ๋ก ๊ฐ๋ ์ดํฐ๋ ์ดํฐ๋ฅผ ๋ฐํํ๋ค.
for (const key of map.keys()) {
console.log(key); // {name: "Lee"} {name: "Kim"}
}
// Map.prototype.values๋ Map ๊ฐ์ฒด์์ ์์๊ฐ์ ๊ฐ์ผ๋ก ๊ฐ๋ ์ดํฐ๋ ์ดํฐ๋ฅผ ๋ฐํํ๋ค.
for (const value of map.values()) {
console.log(value); // developer designer
}
// Map.prototype.entries๋ Map ๊ฐ์ฒด์์ ์์ํค์ ์์๊ฐ์ ๊ฐ์ผ๋ก ๊ฐ๋ ์ดํฐ๋ ์ดํฐ๋ฅผ ๋ฐํํ๋ค.
for (const entry of map.entries()) {
console.log(entry); // [{name: "Lee"}, "developer"] [{name: "Kim"}, "designer"]
}
๋ฉ์๋ ์์ฝ
์ด๋ฆ | ๊ธฐ๋ฅ | ๋น๊ณ |
---|---|---|
Set.prototype.size ํ๋กํผํฐ | ์์ ๊ฐ์ ํ์ธ | getterํจ์๋ง ์กด์ฌ |
Set.prototype.add | ์์ ์ถ๊ฐ | method chaining ๊ฐ๋ฅ |
Set.prototype.has | ์์ ์กด์ฌ ํ์ธ | ๋ฐํ๊ฐ: boolean |
Set .prototoype.delete | ์์ ์ญ์ | ๋ฐํ๊ฐ: boolean(method chaing ๋ถ๊ฐ) |
Set.prototype.clear | ์์ ์ผ๊ด ์ญ์ | ๋ฐํ๊ฐ: undefined |
Set.prototype.forEach | ์์ ์ํ |
์ด๋ฆ | ๊ธฐ๋ฅ | ๋น๊ณ |
---|---|---|
Map.prototype.size ํ๋กํผํฐ | ์์ ๊ฐ์ ํ์ธ | getterํจ์๋ง ์กด์ฌ |
Map.prototype.add | ์์ ์ถ๊ฐ | method chaining ๊ฐ๋ฅ |
Map.prototype.has | ์์ ์กด์ฌ ํ์ธ | ๋ฐํ๊ฐ: boolean |
Map .prototoype.delete | ์์ ์ญ์ | ๋ฐํ๊ฐ: boolean(method chaing ๋ถ๊ฐ) |
Map.prototype.clear | ์์ ์ผ๊ด ์ญ์ | ๋ฐํ๊ฐ: undefined |
Map.prototype.forEach | ์์ ์ํ | |
Map.prototype.keys | ์์ํค๋ฅผ ๊ฐ์ผ๋ก ๊ฐ๋ ์ดํฐ๋ฌ๋ธ์ด๋ฉด์ ์ดํฐ๋ ์ดํฐ์ธ ๊ฐ์ฒด๋ฅผ ๋ฐํ | |
Map.prototype.values | ์์๊ฐ์ ๊ฐ์ผ๋ก ๊ฐ๋ ์ดํฐ๋ฌ๋ธ์ด๋ฉด์ ์ดํฐ๋ ์ดํฐ์ธ ๊ฐ์ฒด๋ฅผ ๋ฐํ | |
Map.prototype.entries | ์์ํค์ ์์๊ฐ์๊ฐ์ผ๋ก ๊ฐ๋ ์ดํฐ๋ฌ๋ธ์ด๋ฉด์ ์ดํฐ๋ ์ดํฐ์ธ ๊ฐ์ฒด๋ฅผ ๋ฐํ |